//
//  1004. 最大连续1的个数 III.swift
//  手撕代码
//
//  Created by xiaoZuDeMeng on 2024/2/2.
//

import Foundation

//https://leetcode.cn/problems/max-consecutive-ones-iii/
//给定一个二进制数组 nums 和一个整数 k，如果可以翻转最多 k 个 0 ，则返回 数组中连续 1 的最大个数 。
//
// 
//
//示例 1：
//
//输入：nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
//输出：6
//解释：[1,1,1,0,0,1,1,1,1,1,1]
//粗体数字从 0 翻转到 1，最长的子数组长度为 6。
//示例 2：
//
//输入：nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
//输出：10
//解释：[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
//粗体数字从 0 翻转到 1，最长的子数组长度为 10。
//
//提示：
//
//1 <= nums.length <= 105
//nums[i] 不是 0 就是 1
//0 <= k <= nums.length

func 最大连续1的个数III(_ nums: [Int], _ k: Int) -> Int {
    var left = 0
    var zeros = 0
    var ans = 0
    for (index, num) in nums.enumerated() {
        if num == 0 {
            zeros += 1
            while zeros > k {
                if nums[left] == 0 {
                    zeros -= 1
                }
                left += 1
            }
        }
        ans = max(ans, index - left + 1)
    }
    return ans
}
